'''
（给一个2024-6-8字符串，转换为datetime对象）
输入datetime对象
输出干支历法
封装成一个python包
'''

import datetime
from constants import GAN, ZHI

gan = ["癸", "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬"]
zhi = ["亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌"]
kongw = ["戌亥", "子丑", "寅卯", "辰巳", "午未", "申酉"]
seasons = (
    '小寒', '大寒', '立春', '雨水', '惊蛰', '春分', '清明', '谷雨', '立夏', '小满', '芒种', '夏至', '小暑', '大暑',
    '立秋', '处暑',
    '白露', '秋分', '寒露', '霜降', '立冬', '小雪', '大雪', '冬至',)
seasonal_equinox_data = {
    1984: [(1, 6, 11, 40), (1, 21, 5, 5), (2, 4, 23, 18), (2, 19, 19, 16), (3, 5, 17, 24), (3, 20, 18, 24),
           (4, 4, 22, 22), (4, 20, 5, 38), (5, 5, 15, 50), (5, 21, 4, 57), (6, 5, 20, 8), (6, 21, 13, 2), (7, 7, 6, 29),
           (7, 22, 23, 58), (8, 7, 16, 17), (8, 23, 7, 0), (9, 7, 19, 9), (9, 23, 4, 32), (10, 8, 10, 42),
           (10, 23, 13, 45), (11, 7, 13, 45), (11, 22, 11, 10), (12, 7, 6, 28), (12, 22, 0, 22)],
    1985: [(1, 5, 17, 35), (1, 20, 10, 57), (2, 4, 5, 11), (2, 19, 1, 7), (3, 5, 23, 16), (3, 21, 0, 13), (4, 5, 4, 13),
           (4, 20, 11, 25), (5, 5, 21, 42), (5, 21, 10, 42), (6, 6, 1, 59), (6, 21, 18, 44), (7, 7, 12, 18),
           (7, 23, 5, 36), (8, 7, 22, 4), (8, 23, 12, 35), (9, 8, 0, 53), (9, 23, 10, 7), (10, 8, 16, 24),
           (10, 23, 19, 21), (11, 7, 19, 29), (11, 22, 16, 50), (12, 7, 12, 16), (12, 22, 6, 7)],
    1986: [(1, 5, 23, 28), (1, 20, 16, 46), (2, 4, 11, 7), (2, 19, 6, 57), (3, 6, 5, 12), (3, 21, 6, 2), (4, 5, 10, 6),
           (4, 20, 17, 12), (5, 6, 3, 30), (5, 21, 16, 27), (6, 6, 7, 44), (6, 22, 0, 29), (7, 7, 18, 0),
           (7, 23, 11, 24), (8, 8, 3, 45), (8, 23, 18, 25), (9, 8, 6, 34), (9, 23, 15, 58), (10, 8, 22, 6),
           (10, 24, 1, 14), (11, 8, 1, 12), (11, 22, 22, 44), (12, 7, 18, 0), (12, 22, 12, 2)],
    1987: [(1, 6, 5, 13), (1, 20, 22, 40), (2, 4, 16, 51), (2, 19, 12, 49), (3, 6, 10, 53), (3, 21, 11, 51),
           (4, 5, 15, 44), (4, 20, 22, 57), (5, 6, 9, 5), (5, 21, 22, 10), (6, 6, 13, 18), (6, 22, 6, 10),
           (7, 7, 23, 38), (7, 23, 17, 6), (8, 8, 9, 29), (8, 24, 0, 9), (9, 8, 12, 24), (9, 23, 21, 45),
           (10, 9, 3, 59), (10, 24, 7, 0), (11, 8, 7, 5), (11, 23, 4, 29), (12, 7, 23, 52), (12, 22, 17, 45)],
    1988: [(1, 6, 11, 3), (1, 21, 4, 24), (2, 4, 22, 42), (2, 19, 18, 35), (3, 5, 16, 46), (3, 20, 17, 38),
           (4, 4, 21, 39), (4, 20, 4, 44), (5, 5, 15, 1), (5, 21, 3, 56), (6, 5, 19, 14), (6, 21, 11, 56),
           (7, 7, 5, 32), (7, 22, 22, 51), (8, 7, 15, 20), (8, 23, 5, 54), (9, 7, 18, 11), (9, 23, 3, 28),
           (10, 8, 9, 44), (10, 23, 12, 44), (11, 7, 12, 48), (11, 22, 10, 11), (12, 7, 5, 34), (12, 21, 23, 27)],
    1989: [(1, 5, 16, 45), (1, 20, 10, 6), (2, 4, 4, 27), (2, 19, 0, 20), (3, 5, 22, 34), (3, 20, 23, 28),
           (4, 5, 3, 29), (4, 20, 10, 38), (5, 5, 20, 53), (5, 21, 9, 53), (6, 6, 1, 5), (6, 21, 17, 53),
           (7, 7, 11, 19), (7, 23, 4, 45), (8, 7, 21, 3), (8, 23, 11, 46), (9, 7, 23, 53), (9, 23, 9, 19),
           (10, 8, 15, 27), (10, 23, 18, 35), (11, 7, 18, 33), (11, 22, 16, 4), (12, 7, 11, 20), (12, 22, 5, 22)],
    1990: [(1, 5, 22, 33), (1, 20, 16, 1), (2, 4, 10, 14), (2, 19, 6, 14), (3, 6, 4, 19), (3, 21, 5, 19), (4, 5, 9, 12),
           (4, 20, 16, 26), (5, 6, 2, 35), (5, 21, 15, 37), (6, 6, 6, 46), (6, 21, 23, 32), (7, 7, 17, 0),
           (7, 23, 10, 21), (8, 8, 2, 45), (8, 23, 17, 20), (9, 8, 5, 37), (9, 23, 14, 55), (10, 8, 21, 13),
           (10, 24, 0, 13), (11, 8, 0, 23), (11, 22, 21, 46), (12, 7, 17, 14), (12, 22, 11, 6)],
    1991: [(1, 6, 4, 28), (1, 20, 21, 47), (2, 4, 16, 8), (2, 19, 11, 58), (3, 6, 10, 12), (3, 21, 11, 1),
           (4, 5, 15, 4), (4, 20, 22, 8), (5, 6, 8, 26), (5, 21, 21, 20), (6, 6, 12, 38), (6, 22, 5, 18),
           (7, 7, 22, 52), (7, 23, 16, 11), (8, 8, 8, 37), (8, 23, 23, 12), (9, 8, 11, 27), (9, 23, 20, 48),
           (10, 9, 3, 1), (10, 24, 6, 5), (11, 8, 6, 7), (11, 23, 3, 35), (12, 7, 22, 56), (12, 22, 16, 53)],
    1992: [(1, 6, 10, 8), (1, 21, 3, 32), (2, 4, 21, 48), (2, 19, 17, 43), (3, 5, 15, 52), (3, 20, 16, 48),
           (4, 4, 20, 45), (4, 20, 3, 56), (5, 5, 14, 8), (5, 21, 3, 12), (6, 5, 18, 22), (6, 21, 11, 14),
           (7, 7, 4, 40), (7, 22, 22, 8), (8, 7, 14, 27), (8, 23, 5, 10), (9, 7, 17, 18), (9, 23, 2, 42),
           (10, 8, 8, 51), (10, 23, 11, 57), (11, 7, 11, 57), (11, 22, 9, 25), (12, 7, 4, 44), (12, 21, 22, 43)],
    1993: [(1, 5, 15, 56), (1, 20, 9, 22), (2, 4, 3, 37), (2, 18, 23, 35), (3, 5, 21, 42), (3, 20, 22, 40),
           (4, 5, 2, 37), (4, 20, 9, 49), (5, 5, 20, 1), (5, 21, 9, 1), (6, 6, 0, 15), (6, 21, 16, 59), (7, 7, 10, 32),
           (7, 23, 3, 50), (8, 7, 20, 17), (8, 23, 10, 50), (9, 7, 23, 7), (9, 23, 8, 22), (10, 8, 14, 40),
           (10, 23, 17, 37), (11, 7, 17, 45), (11, 22, 15, 6), (12, 7, 10, 33), (12, 22, 4, 25)],
    1994: [(1, 5, 21, 48), (1, 20, 15, 7), (2, 4, 9, 30), (2, 19, 5, 21), (3, 6, 3, 37), (3, 21, 4, 28), (4, 5, 8, 31),
           (4, 20, 15, 36), (5, 6, 1, 54), (5, 21, 14, 48), (6, 6, 6, 4), (6, 21, 22, 47), (7, 7, 16, 19),
           (7, 23, 9, 41), (8, 8, 2, 4), (8, 23, 16, 43), (9, 8, 4, 55), (9, 23, 14, 19), (10, 8, 20, 29),
           (10, 23, 23, 36), (11, 7, 23, 35), (11, 22, 21, 5), (12, 7, 16, 22), (12, 22, 10, 22)],
    1995: [(1, 6, 3, 34), (1, 20, 21, 0), (2, 4, 15, 12), (2, 19, 11, 10), (3, 6, 9, 16), (3, 21, 10, 14),
           (4, 5, 14, 8), (4, 20, 21, 21), (5, 6, 7, 30), (5, 21, 20, 34), (6, 6, 11, 42), (6, 22, 4, 34),
           (7, 7, 22, 1), (7, 23, 15, 29), (8, 8, 7, 51), (8, 23, 22, 34), (9, 8, 10, 48), (9, 23, 20, 13),
           (10, 9, 2, 27), (10, 24, 5, 31), (11, 8, 5, 35), (11, 23, 3, 1), (12, 7, 22, 22), (12, 22, 16, 16)],
    1996: [(1, 6, 9, 31), (1, 21, 2, 52), (2, 4, 21, 7), (2, 19, 17, 0), (3, 5, 15, 9), (3, 20, 16, 3), (4, 4, 20, 2),
           (4, 20, 3, 9), (5, 5, 13, 26), (5, 21, 2, 23), (6, 5, 17, 40), (6, 21, 10, 23), (7, 7, 4, 0),
           (7, 22, 21, 18), (8, 7, 13, 48), (8, 23, 4, 22), (9, 7, 16, 42), (9, 23, 2, 0), (10, 8, 8, 18),
           (10, 23, 11, 18), (11, 7, 11, 26), (11, 22, 8, 49), (12, 7, 4, 14), (12, 21, 22, 5)],
    1997: [(1, 5, 15, 24), (1, 20, 8, 42), (2, 4, 3, 1), (2, 18, 22, 51), (3, 5, 21, 4), (3, 20, 21, 54), (4, 5, 1, 56),
           (4, 20, 9, 2), (5, 5, 19, 19), (5, 21, 8, 17), (6, 5, 23, 32), (6, 21, 16, 19), (7, 7, 9, 49),
           (7, 23, 3, 15), (8, 7, 19, 36), (8, 23, 10, 19), (9, 7, 22, 28), (9, 23, 7, 55), (10, 8, 14, 5),
           (10, 23, 17, 14), (11, 7, 17, 14), (11, 22, 14, 47), (12, 7, 10, 4), (12, 22, 4, 7)],
    1998: [(1, 5, 21, 18), (1, 20, 14, 46), (2, 4, 8, 56), (2, 19, 4, 54), (3, 6, 2, 57), (3, 21, 3, 54), (4, 5, 7, 44),
           (4, 20, 14, 56), (5, 6, 1, 3), (5, 21, 14, 5), (6, 6, 5, 13), (6, 21, 22, 2), (7, 7, 15, 30), (7, 23, 8, 55),
           (8, 8, 1, 19), (8, 23, 15, 58), (9, 8, 4, 15), (9, 23, 13, 37), (10, 8, 19, 55), (10, 23, 22, 58),
           (11, 7, 23, 8), (11, 22, 20, 34), (12, 7, 16, 1), (12, 22, 9, 56)],
    1999: [(1, 6, 3, 17), (1, 20, 20, 37), (2, 4, 14, 57), (2, 19, 10, 46), (3, 6, 8, 57), (3, 21, 9, 45),
           (4, 5, 13, 44), (4, 20, 20, 46), (5, 6, 7, 1), (5, 21, 19, 52), (6, 6, 11, 9), (6, 22, 3, 49),
           (7, 7, 21, 24), (7, 23, 14, 44), (8, 8, 7, 14), (8, 23, 21, 51), (9, 8, 10, 9), (9, 23, 19, 31),
           (10, 9, 1, 48), (10, 24, 4, 52), (11, 8, 4, 57), (11, 23, 2, 24), (12, 7, 21, 47), (12, 22, 15, 43)],
    2000: [(1, 6, 9, 0), (1, 21, 2, 23), (2, 4, 20, 40), (2, 19, 16, 33), (3, 5, 14, 42), (3, 20, 15, 35),
           (4, 4, 19, 31), (4, 20, 2, 39), (5, 5, 12, 50), (5, 21, 1, 49), (6, 5, 16, 58), (6, 21, 9, 47),
           (7, 7, 3, 13), (7, 22, 20, 42), (8, 7, 13, 2), (8, 23, 3, 48), (9, 7, 15, 59), (9, 23, 1, 27),
           (10, 8, 7, 38), (10, 23, 10, 47), (11, 7, 10, 48), (11, 22, 8, 19), (12, 7, 3, 37), (12, 21, 21, 37)],
    2001: [(1, 5, 14, 49), (1, 20, 8, 16), (2, 4, 2, 28), (2, 18, 22, 27), (3, 5, 20, 32), (3, 20, 21, 30),
           (4, 5, 1, 24), (4, 20, 8, 35), (5, 5, 18, 44), (5, 21, 7, 44), (6, 5, 22, 53), (6, 21, 15, 37), (7, 7, 9, 6),
           (7, 23, 2, 26), (8, 7, 18, 52), (8, 23, 9, 27), (9, 7, 21, 46), (9, 23, 7, 4), (10, 8, 13, 25),
           (10, 23, 16, 25), (11, 7, 16, 36), (11, 22, 14, 0), (12, 7, 9, 28), (12, 22, 3, 21)],
    2002: [(1, 5, 20, 43), (1, 20, 14, 2), (2, 4, 8, 24), (2, 19, 4, 13), (3, 6, 2, 27), (3, 21, 3, 16), (4, 5, 7, 18),
           (4, 20, 14, 20), (5, 6, 0, 37), (5, 21, 13, 29), (6, 6, 4, 44), (6, 21, 21, 24), (7, 7, 14, 56),
           (7, 23, 8, 14), (8, 8, 0, 39), (8, 23, 15, 16), (9, 8, 3, 31), (9, 23, 12, 55), (10, 8, 19, 9),
           (10, 23, 22, 17), (11, 7, 22, 21), (11, 22, 19, 53), (12, 7, 15, 14), (12, 22, 9, 14)],
    2003: [(1, 6, 2, 27), (1, 20, 19, 52), (2, 4, 14, 5), (2, 19, 10, 0), (3, 6, 8, 4), (3, 21, 8, 59), (4, 5, 12, 52),
           (4, 20, 20, 2), (5, 6, 6, 10), (5, 21, 19, 12), (6, 6, 10, 19), (6, 22, 3, 10), (7, 7, 20, 35),
           (7, 23, 14, 4), (8, 8, 6, 24), (8, 23, 21, 8), (9, 8, 9, 20), (9, 23, 18, 46), (10, 9, 1, 0), (10, 24, 4, 8),
           (11, 8, 4, 13), (11, 23, 1, 43), (12, 7, 21, 5), (12, 22, 15, 3)],
    2004: [(1, 6, 8, 18), (1, 21, 1, 42), (2, 4, 19, 56), (2, 19, 15, 49), (3, 5, 13, 55), (3, 20, 14, 48),
           (4, 4, 18, 43), (4, 20, 1, 50), (5, 5, 12, 2), (5, 21, 0, 59), (6, 5, 16, 13), (6, 21, 8, 56), (7, 7, 2, 31),
           (7, 22, 19, 50), (8, 7, 12, 19), (8, 23, 2, 53), (9, 7, 15, 12), (9, 23, 0, 29), (10, 8, 6, 49),
           (10, 23, 9, 48), (11, 7, 9, 58), (11, 22, 7, 21), (12, 7, 2, 48), (12, 21, 20, 41)],
    2005: [(1, 5, 14, 2), (1, 20, 7, 21), (2, 4, 1, 43), (2, 18, 21, 31), (3, 5, 19, 45), (3, 20, 20, 33),
           (4, 5, 0, 34), (4, 20, 7, 37), (5, 5, 17, 52), (5, 21, 6, 47), (6, 5, 22, 1), (6, 21, 14, 46), (7, 7, 8, 16),
           (7, 23, 1, 40), (8, 7, 18, 3), (8, 23, 8, 45), (9, 7, 20, 56), (9, 23, 6, 23), (10, 8, 12, 33),
           (10, 23, 15, 42), (11, 7, 15, 42), (11, 22, 13, 14), (12, 7, 8, 32), (12, 22, 2, 34)],
    2006: [(1, 5, 19, 46), (1, 20, 13, 15), (2, 4, 7, 27), (2, 19, 3, 25), (3, 6, 1, 28), (3, 21, 2, 25), (4, 5, 6, 15),
           (4, 20, 13, 26), (5, 5, 23, 30), (5, 21, 12, 31), (6, 6, 3, 36), (6, 21, 20, 25), (7, 7, 13, 51),
           (7, 23, 7, 17), (8, 7, 23, 40), (8, 23, 14, 22), (9, 8, 2, 39), (9, 23, 12, 3), (10, 8, 18, 21),
           (10, 23, 21, 26), (11, 7, 21, 34), (11, 22, 19, 1), (12, 7, 14, 26), (12, 22, 8, 22)],
    2007: [(1, 6, 1, 40), (1, 20, 19, 0), (2, 4, 13, 18), (2, 19, 9, 8), (3, 6, 7, 17), (3, 21, 8, 7), (4, 5, 12, 4),
           (4, 20, 19, 7), (5, 6, 5, 20), (5, 21, 18, 11), (6, 6, 9, 27), (6, 22, 2, 6), (7, 7, 19, 41), (7, 23, 13, 0),
           (8, 8, 5, 31), (8, 23, 20, 7), (9, 8, 8, 29), (9, 23, 17, 51), (10, 9, 0, 11), (10, 24, 3, 15),
           (11, 8, 3, 24), (11, 23, 0, 49), (12, 7, 20, 14), (12, 22, 14, 7)],
    2008: [(1, 6, 7, 24), (1, 21, 0, 43), (2, 4, 19, 0), (2, 19, 14, 49), (3, 5, 12, 58), (3, 20, 13, 48),
           (4, 4, 17, 45), (4, 20, 0, 51), (5, 5, 11, 3), (5, 21, 0, 0), (6, 5, 15, 11), (6, 21, 7, 59), (7, 7, 1, 26),
           (7, 22, 18, 54), (8, 7, 11, 16), (8, 23, 2, 2), (9, 7, 14, 14), (9, 22, 23, 44), (10, 8, 5, 56),
           (10, 23, 9, 8), (11, 7, 9, 10), (11, 22, 6, 44), (12, 7, 2, 2), (12, 21, 20, 3)],
    2009: [(1, 5, 13, 14), (1, 20, 6, 40), (2, 4, 0, 49), (2, 18, 20, 46), (3, 5, 18, 47), (3, 20, 19, 43),
           (4, 4, 23, 33), (4, 20, 6, 44), (5, 5, 16, 50), (5, 21, 5, 51), (6, 5, 20, 59), (6, 21, 13, 45),
           (7, 7, 7, 13), (7, 23, 0, 35), (8, 7, 17, 1), (8, 23, 7, 38), (9, 7, 19, 57), (9, 23, 5, 18),
           (10, 8, 11, 40), (10, 23, 14, 43), (11, 7, 14, 56), (11, 22, 12, 22), (12, 7, 7, 52), (12, 22, 1, 46)],
    2010: [(1, 5, 19, 8), (1, 20, 12, 27), (2, 4, 6, 47), (2, 19, 2, 35), (3, 6, 0, 46), (3, 21, 1, 32), (4, 5, 5, 30),
           (4, 20, 12, 29), (5, 5, 22, 44), (5, 21, 11, 33), (6, 6, 2, 49), (6, 21, 19, 28), (7, 7, 13, 2),
           (7, 23, 6, 21), (8, 7, 22, 49), (8, 23, 13, 26), (9, 8, 1, 44), (9, 23, 11, 9), (10, 8, 17, 26),
           (10, 23, 20, 35), (11, 7, 20, 42), (11, 22, 18, 14), (12, 7, 13, 38), (12, 22, 7, 38)],
    2011: [(1, 6, 0, 54), (1, 20, 18, 18), (2, 4, 12, 32), (2, 19, 8, 25), (3, 6, 6, 29), (3, 21, 7, 20),
           (4, 5, 11, 11), (4, 20, 18, 17), (5, 6, 4, 23), (5, 21, 17, 21), (6, 6, 8, 27), (6, 22, 1, 16),
           (7, 7, 18, 42), (7, 23, 12, 11), (8, 8, 4, 33), (8, 23, 19, 20), (9, 8, 7, 34), (9, 23, 17, 4),
           (10, 8, 23, 19), (10, 24, 2, 30), (11, 8, 2, 34), (11, 23, 0, 7), (12, 7, 19, 29), (12, 22, 13, 30)],
    2012: [(1, 6, 6, 43), (1, 21, 0, 9), (2, 4, 18, 22), (2, 19, 14, 17), (3, 5, 12, 21), (3, 20, 13, 14),
           (4, 4, 17, 5), (4, 20, 0, 12), (5, 5, 10, 19), (5, 20, 23, 15), (6, 5, 14, 25), (6, 21, 7, 8), (7, 7, 0, 40),
           (7, 22, 18, 0), (8, 7, 10, 30), (8, 23, 1, 6), (9, 7, 13, 29), (9, 22, 22, 49), (10, 8, 5, 11),
           (10, 23, 8, 13), (11, 7, 8, 25), (11, 22, 5, 50), (12, 7, 1, 18), (12, 21, 19, 11)],
    2013: [(1, 5, 12, 33), (1, 20, 5, 51), (2, 4, 0, 13), (2, 18, 20, 1), (3, 5, 18, 14), (3, 20, 19, 1), (4, 4, 23, 2),
           (4, 20, 6, 3), (5, 5, 16, 18), (5, 21, 5, 9), (6, 5, 20, 23), (6, 21, 13, 3), (7, 7, 6, 34), (7, 22, 23, 55),
           (8, 7, 16, 20), (8, 23, 7, 1), (9, 7, 19, 16), (9, 23, 4, 44), (10, 8, 10, 58), (10, 23, 14, 9),
           (11, 7, 14, 13), (11, 22, 11, 48), (12, 7, 7, 8), (12, 22, 1, 11)],
    2014: [(1, 5, 18, 24), (1, 20, 11, 51), (2, 4, 6, 3), (2, 19, 1, 59), (3, 6, 0, 2), (3, 21, 0, 57), (4, 5, 4, 46),
           (4, 20, 11, 55), (5, 5, 21, 59), (5, 21, 10, 59), (6, 6, 2, 3), (6, 21, 18, 51), (7, 7, 12, 14),
           (7, 23, 5, 41), (8, 7, 22, 2), (8, 23, 12, 45), (9, 8, 1, 1), (9, 23, 10, 29), (10, 8, 16, 47),
           (10, 23, 19, 57), (11, 7, 20, 6), (11, 22, 17, 38), (12, 7, 13, 4), (12, 22, 7, 3)],
    2015: [(1, 6, 0, 20), (1, 20, 17, 43), (2, 4, 11, 58), (2, 19, 7, 49), (3, 6, 5, 55), (3, 21, 6, 45),
           (4, 5, 10, 39), (4, 20, 17, 41), (5, 6, 3, 52), (5, 21, 16, 44), (6, 6, 7, 58), (6, 22, 0, 37),
           (7, 7, 18, 12), (7, 23, 11, 30), (8, 8, 4, 1), (8, 23, 18, 37), (9, 8, 6, 59), (9, 23, 16, 20),
           (10, 8, 22, 42), (10, 24, 1, 46), (11, 8, 1, 58), (11, 22, 23, 25), (12, 7, 18, 53), (12, 22, 12, 47)],
    2016: [(1, 6, 6, 8), (1, 20, 23, 27), (2, 4, 17, 46), (2, 19, 13, 33), (3, 5, 11, 43), (3, 20, 12, 30),
           (4, 4, 16, 27), (4, 19, 23, 29), (5, 5, 9, 41), (5, 20, 22, 36), (6, 5, 13, 48), (6, 21, 6, 34),
           (7, 7, 0, 3), (7, 22, 17, 30), (8, 7, 9, 53), (8, 23, 0, 38), (9, 7, 12, 51), (9, 22, 22, 21),
           (10, 8, 4, 33), (10, 23, 7, 45), (11, 7, 7, 47), (11, 22, 5, 22), (12, 7, 0, 41), (12, 21, 18, 44)],
    2017: [(1, 5, 11, 55), (1, 20, 5, 23), (2, 3, 23, 34), (2, 18, 19, 31), (3, 5, 17, 32), (3, 20, 18, 28),
           (4, 4, 22, 17), (4, 20, 5, 27), (5, 5, 15, 31), (5, 21, 4, 30), (6, 5, 19, 36), (6, 21, 12, 24),
           (7, 7, 5, 50), (7, 22, 23, 15), (8, 7, 15, 40), (8, 23, 6, 20), (9, 7, 18, 38), (9, 23, 4, 1),
           (10, 8, 10, 22), (10, 23, 13, 26), (11, 7, 13, 37), (11, 22, 11, 4), (12, 7, 6, 32), (12, 22, 0, 27)],
    2018: [(1, 5, 17, 48), (1, 20, 11, 9), (2, 4, 5, 28), (2, 19, 1, 18), (3, 5, 23, 28), (3, 21, 0, 15), (4, 5, 4, 12),
           (4, 20, 11, 12), (5, 5, 21, 25), (5, 21, 10, 14), (6, 6, 1, 29), (6, 21, 18, 7), (7, 7, 11, 41),
           (7, 23, 5, 0), (8, 7, 21, 30), (8, 23, 12, 8), (9, 8, 0, 29), (9, 23, 9, 54), (10, 8, 16, 14),
           (10, 23, 19, 22), (11, 7, 19, 31), (11, 22, 17, 1), (12, 7, 12, 25), (12, 22, 6, 22)],
    2019: [(1, 5, 23, 38), (1, 20, 16, 59), (2, 4, 11, 14), (2, 19, 7, 3), (3, 6, 5, 9), (3, 21, 5, 58), (4, 5, 9, 51),
           (4, 20, 16, 55), (5, 6, 3, 2), (5, 21, 15, 59), (6, 6, 7, 6), (6, 21, 23, 54), (7, 7, 17, 20),
           (7, 23, 10, 50), (8, 8, 3, 13), (8, 23, 18, 1), (9, 8, 6, 16), (9, 23, 15, 50), (10, 8, 22, 5),
           (10, 24, 1, 19), (11, 8, 1, 24), (11, 22, 22, 58), (12, 7, 18, 18), (12, 22, 12, 19)],
    2020: [(1, 6, 5, 30), (1, 20, 22, 54), (2, 4, 17, 3), (2, 19, 12, 57), (3, 5, 10, 56), (3, 20, 11, 49),
           (4, 4, 15, 38), (4, 19, 22, 45), (5, 5, 8, 51), (5, 20, 21, 49), (6, 5, 12, 58), (6, 21, 5, 43),
           (7, 6, 23, 14), (7, 22, 16, 36), (8, 7, 9, 6), (8, 22, 23, 44), (9, 7, 12, 8), (9, 22, 21, 30),
           (10, 8, 3, 55), (10, 23, 6, 59), (11, 7, 7, 13), (11, 22, 4, 39), (12, 7, 0, 9), (12, 21, 18, 2)],
    2021: [(1, 5, 11, 23), (1, 20, 4, 39), (2, 3, 22, 58), (2, 18, 18, 43), (3, 5, 16, 53), (3, 20, 17, 37),
           (4, 4, 21, 35), (4, 20, 4, 33), (5, 5, 14, 47), (5, 21, 3, 37), (6, 5, 18, 52), (6, 21, 11, 32),
           (7, 7, 5, 5), (7, 22, 22, 26), (8, 7, 14, 53), (8, 23, 5, 34), (9, 7, 17, 52), (9, 23, 3, 21),
           (10, 8, 9, 39), (10, 23, 12, 51), (11, 7, 12, 58), (11, 22, 10, 33), (12, 7, 5, 57), (12, 21, 23, 59)],
    2022: [(1, 5, 17, 14), (1, 20, 10, 39), (2, 4, 4, 50), (2, 19, 0, 43), (3, 5, 22, 43), (3, 20, 23, 33),
           (4, 5, 3, 20), (4, 20, 10, 24), (5, 5, 20, 25), (5, 21, 9, 22), (6, 6, 0, 25), (6, 21, 17, 13),
           (7, 7, 10, 37), (7, 23, 4, 6), (8, 7, 20, 29), (8, 23, 11, 16), (9, 7, 23, 32), (9, 23, 9, 3),
           (10, 8, 15, 22), (10, 23, 18, 35), (11, 7, 18, 45), (11, 22, 16, 20), (12, 7, 11, 46), (12, 22, 5, 48)],
    2023: [(1, 5, 23, 4), (1, 20, 16, 29), (2, 4, 10, 42), (2, 19, 6, 34), (3, 6, 4, 36), (3, 21, 5, 24), (4, 5, 9, 13),
           (4, 20, 16, 13), (5, 6, 2, 18), (5, 21, 15, 9), (6, 6, 6, 18), (6, 21, 22, 57), (7, 7, 16, 30),
           (7, 23, 9, 50), (8, 8, 2, 22), (8, 23, 17, 1), (9, 8, 5, 26), (9, 23, 14, 49), (10, 8, 21, 15),
           (10, 24, 0, 20), (11, 8, 0, 35), (11, 22, 22, 2), (12, 7, 17, 32), (12, 22, 11, 27)],
    2024: [(1, 6, 4, 49), (1, 20, 22, 7), (2, 4, 16, 27), (2, 19, 12, 13), (3, 5, 10, 22), (3, 20, 11, 6),
           (4, 4, 15, 2), (4, 19, 21, 59), (5, 5, 8, 10), (5, 20, 20, 59), (6, 5, 12, 9), (6, 21, 4, 50),
           (7, 6, 22, 20), (7, 22, 15, 44), (8, 7, 8, 9), (8, 22, 22, 55), (9, 7, 11, 11), (9, 22, 20, 43),
           (10, 8, 2, 59), (10, 23, 6, 14), (11, 7, 6, 20), (11, 22, 3, 56), (12, 6, 23, 17), (12, 21, 17, 20)],
    2025: [(1, 5, 10, 32), (1, 20, 4, 0), (2, 3, 22, 10), (2, 18, 18, 6), (3, 5, 16, 7), (3, 20, 17, 1), (4, 4, 20, 48),
           (4, 20, 3, 55), (5, 5, 13, 57), (5, 21, 2, 54), (6, 5, 17, 56), (6, 21, 10, 42), (7, 7, 4, 4),
           (7, 22, 21, 29), (8, 7, 13, 51), (8, 23, 4, 33), (9, 7, 16, 51), (9, 23, 2, 19), (10, 8, 8, 41),
           (10, 23, 11, 50), (11, 7, 12, 4), (11, 22, 9, 35), (12, 7, 5, 4), (12, 21, 23, 3)],
    2026: [(1, 5, 16, 23), (1, 20, 9, 44), (2, 4, 4, 2), (2, 18, 23, 51), (3, 5, 21, 58), (3, 20, 22, 45),
           (4, 5, 2, 39), (4, 20, 9, 39), (5, 5, 19, 48), (5, 21, 8, 36), (6, 5, 23, 48), (6, 21, 16, 24),
           (7, 7, 9, 56), (7, 23, 3, 13), (8, 7, 19, 42), (8, 23, 10, 18), (9, 7, 22, 41), (9, 23, 8, 5),
           (10, 8, 14, 29), (10, 23, 17, 37), (11, 7, 17, 52), (11, 22, 15, 23), (12, 7, 10, 52), (12, 22, 4, 50)],
    2027: [(1, 5, 22, 9), (1, 20, 15, 29), (2, 4, 9, 46), (2, 19, 5, 33), (3, 6, 3, 39), (3, 21, 4, 24), (4, 5, 8, 17),
           (4, 20, 15, 17), (5, 6, 1, 25), (5, 21, 14, 18), (6, 6, 5, 25), (6, 21, 22, 10), (7, 7, 15, 37),
           (7, 23, 9, 4), (8, 8, 1, 26), (8, 23, 16, 14), (9, 8, 4, 28), (9, 23, 14, 1), (10, 8, 20, 17),
           (10, 23, 23, 32), (11, 7, 23, 38), (11, 22, 21, 16), (12, 7, 16, 37), (12, 22, 10, 42)],
    2028: [(1, 6, 3, 54), (1, 20, 21, 21), (2, 4, 15, 31), (2, 19, 11, 25), (3, 5, 9, 24), (3, 20, 10, 17),
           (4, 4, 14, 3), (4, 19, 21, 9), (5, 5, 7, 12), (5, 20, 20, 9), (6, 5, 11, 15), (6, 21, 4, 1), (7, 6, 21, 30),
           (7, 22, 14, 53), (8, 7, 7, 21), (8, 22, 22, 0), (9, 7, 10, 22), (9, 22, 19, 45), (10, 8, 2, 8),
           (10, 23, 5, 13), (11, 7, 5, 27), (11, 22, 2, 54), (12, 6, 22, 24), (12, 21, 16, 19)],
    2029: [(1, 5, 9, 41), (1, 20, 3, 0), (2, 3, 21, 20), (2, 18, 17, 7), (3, 5, 15, 17), (3, 20, 16, 1), (4, 4, 19, 58),
           (4, 20, 2, 55), (5, 5, 13, 7), (5, 21, 1, 55), (6, 5, 17, 9), (6, 21, 9, 48), (7, 7, 3, 22), (7, 22, 20, 41),
           (8, 7, 13, 11), (8, 23, 3, 51), (9, 7, 16, 11), (9, 23, 1, 38), (10, 8, 7, 58), (10, 23, 11, 8),
           (11, 7, 11, 16), (11, 22, 8, 49), (12, 7, 4, 13), (12, 21, 22, 14)],
    2030: [(1, 5, 15, 30), (1, 20, 8, 54), (2, 4, 3, 8), (2, 18, 22, 59), (3, 5, 21, 3), (3, 20, 21, 51), (4, 5, 1, 40),
           (4, 20, 8, 43), (5, 5, 18, 46), (5, 21, 7, 40), (6, 5, 22, 44), (6, 21, 15, 31), (7, 7, 8, 55),
           (7, 23, 2, 24), (8, 7, 18, 47), (8, 23, 9, 36), (9, 7, 21, 52), (9, 23, 7, 26), (10, 8, 13, 45),
           (10, 23, 17, 0), (11, 7, 17, 8), (11, 22, 14, 44), (12, 7, 10, 7), (12, 22, 4, 9)],
    2031: [(1, 5, 21, 23), (1, 20, 14, 47), (2, 4, 8, 58), (2, 19, 4, 50), (3, 6, 2, 50), (3, 21, 3, 40), (4, 5, 7, 28),
           (4, 20, 14, 31), (5, 6, 0, 35), (5, 21, 13, 27), (6, 6, 4, 35), (6, 21, 21, 16), (7, 7, 14, 48),
           (7, 23, 8, 10), (8, 8, 0, 42), (8, 23, 15, 23), (9, 8, 3, 50), (9, 23, 13, 15), (10, 8, 19, 42),
           (10, 23, 22, 49), (11, 7, 23, 5), (11, 22, 20, 32), (12, 7, 16, 2), (12, 22, 9, 55)],
    2032: [(1, 6, 3, 15), (1, 20, 20, 31), (2, 4, 14, 48), (2, 19, 10, 32), (3, 5, 8, 40), (3, 20, 9, 21),
           (4, 4, 13, 17), (4, 19, 20, 13), (5, 5, 6, 25), (5, 20, 19, 14), (6, 5, 10, 27), (6, 21, 3, 8),
           (7, 6, 20, 40), (7, 22, 14, 4), (8, 7, 6, 32), (8, 22, 21, 18), (9, 7, 9, 37), (9, 22, 19, 10),
           (10, 8, 1, 30), (10, 23, 4, 46), (11, 7, 4, 54), (11, 22, 2, 31), (12, 6, 21, 53), (12, 21, 15, 55)],
    2033: [(1, 5, 9, 7), (1, 20, 2, 32), (2, 3, 20, 41), (2, 18, 16, 33), (3, 5, 14, 32), (3, 20, 15, 22),
           (4, 4, 19, 7), (4, 20, 2, 12), (5, 5, 12, 13), (5, 21, 1, 10), (6, 5, 16, 13), (6, 21, 9, 0), (7, 7, 2, 24),
           (7, 22, 19, 52), (8, 7, 12, 15), (8, 23, 3, 1), (9, 7, 15, 20), (9, 23, 0, 51), (10, 8, 7, 13),
           (10, 23, 10, 27), (11, 7, 10, 40), (11, 22, 8, 15), (12, 7, 3, 44), (12, 21, 21, 45)],
    2034: [(1, 5, 15, 4), (1, 20, 8, 27), (2, 4, 2, 40), (2, 18, 22, 29), (3, 5, 20, 32), (3, 20, 21, 17), (4, 5, 1, 6),
           (4, 20, 8, 3), (5, 5, 18, 8), (5, 21, 6, 56), (6, 5, 22, 6), (6, 21, 14, 43), (7, 7, 8, 17), (7, 23, 1, 36),
           (8, 7, 18, 8), (8, 23, 8, 47), (9, 7, 21, 13), (9, 23, 6, 39), (10, 8, 13, 6), (10, 23, 16, 16),
           (11, 7, 16, 33), (11, 22, 14, 4), (12, 7, 9, 36), (12, 22, 3, 33)],
    2035: [(1, 5, 20, 55), (1, 20, 14, 14), (2, 4, 8, 31), (2, 19, 4, 15), (3, 6, 2, 21), (3, 21, 3, 2), (4, 5, 6, 53),
           (4, 20, 13, 48), (5, 5, 23, 54), (5, 21, 12, 43), (6, 6, 3, 50), (6, 21, 20, 32), (7, 7, 14, 0),
           (7, 23, 7, 28), (8, 7, 23, 54), (8, 23, 14, 43), (9, 8, 3, 2), (9, 23, 12, 38), (10, 8, 18, 57),
           (10, 23, 22, 15), (11, 7, 22, 23), (11, 22, 20, 2), (12, 7, 15, 25), (12, 22, 9, 30)],
    2036: [(1, 6, 2, 43), (1, 20, 20, 10), (2, 4, 14, 19), (2, 19, 10, 14), (3, 5, 8, 11), (3, 20, 9, 2),
           (4, 4, 12, 45), (4, 19, 19, 50), (5, 5, 5, 49), (5, 20, 18, 44), (6, 5, 9, 46), (6, 21, 2, 31),
           (7, 6, 19, 57), (7, 22, 13, 22), (8, 7, 5, 48), (8, 22, 20, 32), (9, 7, 8, 54), (9, 22, 18, 23),
           (10, 8, 0, 48), (10, 23, 3, 58), (11, 7, 4, 14), (11, 22, 1, 45), (12, 6, 21, 15), (12, 21, 15, 12)],
    2037: [(1, 5, 8, 33), (1, 20, 1, 53), (2, 3, 20, 11), (2, 18, 15, 58), (3, 5, 14, 5), (3, 20, 14, 49),
           (4, 4, 18, 43), (4, 20, 1, 40), (5, 5, 11, 49), (5, 21, 0, 35), (6, 5, 15, 46), (6, 21, 8, 22),
           (7, 7, 1, 54), (7, 22, 19, 12), (8, 7, 11, 42), (8, 23, 2, 21), (9, 7, 14, 45), (9, 23, 0, 12),
           (10, 8, 6, 37), (10, 23, 9, 49), (11, 7, 10, 3), (11, 22, 7, 38), (12, 7, 3, 6), (12, 21, 21, 7)],
    2038: [(1, 5, 14, 26), (1, 20, 7, 48), (2, 4, 2, 3), (2, 18, 21, 51), (3, 5, 19, 55), (3, 20, 20, 40),
           (4, 5, 0, 29), (4, 20, 7, 28), (5, 5, 17, 30), (5, 21, 6, 22), (6, 5, 21, 25), (6, 21, 14, 9), (7, 7, 7, 32),
           (7, 23, 0, 59), (8, 7, 17, 20), (8, 23, 8, 9), (9, 7, 20, 25), (9, 23, 6, 1), (10, 8, 12, 21),
           (10, 23, 15, 40), (11, 7, 15, 50), (11, 22, 13, 30), (12, 7, 8, 56), (12, 22, 3, 1)],
    2039: [(1, 5, 20, 16), (1, 20, 13, 43), (2, 4, 7, 52), (2, 19, 3, 45), (3, 6, 1, 42), (3, 21, 2, 31), (4, 5, 6, 15),
           (4, 20, 13, 17), (5, 5, 23, 17), (5, 21, 12, 10), (6, 6, 3, 15), (6, 21, 19, 57), (7, 7, 13, 25),
           (7, 23, 6, 47), (8, 7, 23, 17), (8, 23, 13, 58), (9, 8, 2, 23), (9, 23, 11, 49), (10, 8, 18, 16),
           (10, 23, 21, 24), (11, 7, 21, 42), (11, 22, 19, 11), (12, 7, 14, 44), (12, 22, 8, 40)],
    2040: [(1, 6, 2, 3), (1, 20, 19, 20), (2, 4, 13, 39), (2, 19, 9, 23), (3, 5, 7, 30), (3, 20, 8, 11), (4, 4, 12, 5),
           (4, 19, 18, 59), (5, 5, 5, 8), (5, 20, 17, 55), (6, 5, 9, 7), (6, 21, 1, 46), (7, 6, 19, 18),
           (7, 22, 12, 40), (8, 7, 5, 9), (8, 22, 19, 52), (9, 7, 8, 13), (9, 22, 17, 44), (10, 8, 0, 5),
           (10, 23, 3, 19), (11, 7, 3, 28), (11, 22, 1, 5), (12, 6, 20, 29), (12, 21, 14, 32)],
    2041: [(1, 5, 7, 47), (1, 20, 1, 12), (2, 3, 19, 24), (2, 18, 15, 16), (3, 5, 13, 17), (3, 20, 14, 6),
           (4, 4, 17, 52), (4, 20, 0, 54), (5, 5, 10, 54), (5, 20, 23, 48), (6, 5, 14, 49), (6, 21, 7, 35),
           (7, 7, 0, 58), (7, 22, 18, 26), (8, 7, 10, 48), (8, 23, 1, 35), (9, 7, 13, 53), (9, 22, 23, 26),
           (10, 8, 5, 46), (10, 23, 9, 1), (11, 7, 9, 12), (11, 22, 6, 48), (12, 7, 2, 15), (12, 21, 20, 17)],
    2042: [(1, 5, 13, 34), (1, 20, 6, 59), (2, 4, 1, 12), (2, 18, 21, 4), (3, 5, 19, 5), (3, 20, 19, 52),
           (4, 4, 23, 40), (4, 20, 6, 39), (5, 5, 16, 42), (5, 21, 5, 30), (6, 5, 20, 37), (6, 21, 13, 15),
           (7, 7, 6, 46), (7, 23, 0, 5), (8, 7, 16, 38), (8, 23, 7, 17), (9, 7, 19, 45), (9, 23, 5, 11),
           (10, 8, 11, 40), (10, 23, 14, 49), (11, 7, 15, 7), (11, 22, 12, 36), (12, 7, 8, 8), (12, 22, 2, 3)],
    2043: [(1, 5, 19, 24), (1, 20, 12, 41), (2, 4, 6, 58), (2, 19, 2, 41), (3, 6, 0, 47), (3, 21, 1, 27), (4, 5, 5, 19),
           (4, 20, 12, 14), (5, 5, 22, 21), (5, 21, 11, 8), (6, 6, 2, 17), (6, 21, 18, 57), (7, 7, 12, 27),
           (7, 23, 5, 53), (8, 7, 22, 20), (8, 23, 13, 9), (9, 8, 1, 29), (9, 23, 11, 6), (10, 8, 17, 27),
           (10, 23, 20, 46), (11, 7, 20, 55), (11, 22, 18, 34), (12, 7, 13, 56), (12, 22, 8, 0)],
    2044: [(1, 6, 1, 12), (1, 20, 18, 36), (2, 4, 12, 43), (2, 19, 8, 35), (3, 5, 6, 31), (3, 20, 7, 20), (4, 4, 11, 2),
           (4, 19, 18, 6), (5, 5, 4, 5), (5, 20, 17, 1), (6, 5, 8, 3), (6, 21, 0, 50), (7, 6, 18, 15), (7, 22, 11, 42),
           (8, 7, 4, 8), (8, 22, 18, 54), (9, 7, 7, 16), (9, 22, 16, 47), (10, 7, 23, 12), (10, 23, 2, 25),
           (11, 7, 2, 41), (11, 22, 0, 14), (12, 6, 19, 44), (12, 21, 13, 43)],
    2045: [(1, 5, 7, 2), (1, 20, 0, 21), (2, 3, 18, 35), (2, 18, 14, 21), (3, 5, 12, 24), (3, 20, 13, 7),
           (4, 4, 16, 56), (4, 19, 23, 52), (5, 5, 9, 59), (5, 20, 22, 45), (6, 5, 13, 56), (6, 21, 6, 33),
           (7, 7, 0, 7), (7, 22, 17, 26), (8, 7, 9, 59), (8, 23, 0, 38), (9, 7, 13, 4), (9, 22, 22, 32), (10, 8, 5, 0),
           (10, 23, 8, 12), (11, 7, 8, 29), (11, 22, 6, 3), (12, 7, 1, 35), (12, 21, 19, 34)],
    2046: [(1, 5, 12, 55), (1, 20, 6, 15), (2, 4, 0, 30), (2, 18, 20, 15), (3, 5, 18, 17), (3, 20, 18, 57),
           (4, 4, 22, 44), (4, 20, 5, 38), (5, 5, 15, 40), (5, 21, 4, 28), (6, 5, 19, 31), (6, 21, 12, 14),
           (7, 7, 5, 39), (7, 22, 23, 8), (8, 7, 15, 32), (8, 23, 6, 24), (9, 7, 18, 42), (9, 23, 4, 21),
           (10, 8, 10, 41), (10, 23, 14, 3), (11, 7, 14, 13), (11, 22, 11, 55), (12, 7, 7, 20), (12, 22, 1, 27)],
    2047: [(1, 5, 18, 41), (1, 20, 12, 9), (2, 4, 6, 17), (2, 19, 2, 9), (3, 6, 0, 4), (3, 21, 0, 52), (4, 5, 4, 32),
           (4, 20, 11, 32), (5, 5, 21, 28), (5, 21, 10, 19), (6, 6, 1, 20), (6, 21, 18, 2), (7, 7, 11, 29),
           (7, 23, 4, 54), (8, 7, 21, 25), (8, 23, 12, 10), (9, 8, 0, 37), (9, 23, 10, 7), (10, 8, 16, 37),
           (10, 23, 19, 48), (11, 7, 20, 6), (11, 22, 17, 37), (12, 7, 13, 10), (12, 22, 7, 6)],
    2048: [(1, 6, 0, 28), (1, 20, 17, 46), (2, 4, 12, 4), (2, 19, 7, 47), (3, 5, 5, 53), (3, 20, 6, 33), (4, 4, 10, 24),
           (4, 19, 17, 16), (5, 5, 3, 23), (5, 20, 16, 7), (6, 5, 7, 17), (6, 20, 23, 53), (7, 6, 17, 26),
           (7, 22, 10, 46), (8, 7, 3, 18), (8, 22, 18, 1), (9, 7, 6, 27), (9, 22, 16, 0), (10, 7, 22, 26),
           (10, 23, 1, 42), (11, 7, 1, 56), (11, 21, 23, 32), (12, 6, 19, 0), (12, 21, 13, 1)],
    2049: [(1, 5, 6, 18), (1, 19, 23, 40), (2, 3, 17, 52), (2, 18, 13, 41), (3, 5, 11, 42), (3, 20, 12, 28),
           (4, 4, 16, 13), (4, 19, 23, 12), (5, 5, 9, 12), (5, 20, 22, 3), (6, 5, 13, 3), (6, 21, 5, 46), (7, 6, 23, 8),
           (7, 22, 16, 35), (8, 7, 8, 57), (8, 22, 23, 46), (9, 7, 12, 5), (9, 22, 21, 42), (10, 8, 4, 4),
           (10, 23, 7, 24), (11, 7, 7, 37), (11, 22, 5, 18), (12, 7, 0, 46), (12, 21, 18, 51)],
    2050: [(1, 5, 12, 7), (1, 20, 5, 33), (2, 3, 23, 43), (2, 18, 19, 34), (3, 5, 17, 32), (3, 20, 18, 19),
           (4, 4, 22, 2), (4, 20, 5, 1), (5, 5, 15, 1), (5, 21, 3, 50), (6, 5, 18, 54), (6, 21, 11, 32), (7, 7, 5, 1),
           (7, 22, 22, 20), (8, 7, 14, 51), (8, 23, 5, 32), (9, 7, 18, 0), (9, 23, 3, 27), (10, 8, 9, 59),
           (10, 23, 13, 11), (11, 7, 13, 33), (11, 22, 11, 5), (12, 7, 6, 41), (12, 22, 0, 38)],
    2051: [(1, 5, 18, 1), (1, 20, 11, 18), (2, 4, 5, 35), (2, 19, 1, 16), (3, 5, 23, 21), (3, 20, 23, 58),
           (4, 5, 3, 49), (4, 20, 10, 40), (5, 5, 20, 46), (5, 21, 9, 30), (6, 6, 0, 40), (6, 21, 17, 18),
           (7, 7, 10, 48), (7, 23, 4, 12), (8, 7, 20, 41), (8, 23, 11, 28), (9, 7, 23, 50), (9, 23, 9, 26),
           (10, 8, 15, 49), (10, 23, 19, 9), (11, 7, 19, 21), (11, 22, 17, 2), (12, 7, 12, 28), (12, 22, 6, 33)],
    2052: [(1, 5, 23, 48), (1, 20, 17, 13), (2, 4, 11, 22), (2, 19, 7, 13), (3, 5, 5, 9), (3, 20, 5, 55), (4, 4, 9, 36),
           (4, 19, 16, 37), (5, 5, 2, 34), (5, 20, 15, 28), (6, 5, 6, 28), (6, 20, 23, 15), (7, 6, 16, 39),
           (7, 22, 10, 8), (8, 7, 2, 32), (8, 22, 17, 20), (9, 7, 5, 41), (9, 22, 15, 15), (10, 7, 21, 39),
           (10, 23, 0, 54), (11, 7, 1, 9), (11, 21, 22, 45), (12, 6, 18, 14), (12, 21, 12, 16)],
    2053: [(1, 5, 5, 35), (1, 19, 22, 58), (2, 3, 17, 12), (2, 18, 13, 1), (3, 5, 11, 2), (3, 20, 11, 46),
           (4, 4, 15, 33), (4, 19, 22, 29), (5, 5, 8, 33), (5, 20, 21, 19), (6, 5, 12, 27), (6, 21, 5, 3),
           (7, 6, 22, 36), (7, 22, 15, 55), (8, 7, 8, 29), (8, 22, 23, 9), (9, 7, 11, 38), (9, 22, 21, 5),
           (10, 8, 3, 35), (10, 23, 6, 46), (11, 7, 7, 5), (11, 22, 4, 38), (12, 7, 0, 11), (12, 21, 18, 9)],
    2054: [(1, 5, 11, 31), (1, 20, 4, 50), (2, 3, 23, 7), (2, 18, 18, 51), (3, 5, 16, 54), (3, 20, 17, 33),
           (4, 4, 21, 22), (4, 20, 4, 14), (5, 5, 14, 17), (5, 21, 3, 2), (6, 5, 18, 6), (6, 21, 10, 46), (7, 7, 4, 13),
           (7, 22, 21, 40), (8, 7, 14, 6), (8, 23, 4, 57), (9, 7, 17, 19), (9, 23, 2, 58), (10, 8, 9, 21),
           (10, 23, 12, 44), (11, 7, 12, 55), (11, 22, 10, 38), (12, 7, 6, 2), (12, 22, 0, 9)],
    2055: [(1, 5, 17, 22), (1, 20, 10, 48), (2, 4, 4, 55), (2, 19, 0, 46), (3, 5, 22, 40), (3, 20, 23, 28),
           (4, 5, 3, 7), (4, 20, 10, 8), (5, 5, 20, 3), (5, 21, 8, 55), (6, 5, 23, 55), (6, 21, 16, 39), (7, 7, 10, 4),
           (7, 23, 3, 31), (8, 7, 20, 0), (8, 23, 10, 48), (9, 7, 23, 15), (9, 23, 8, 48), (10, 8, 15, 18),
           (10, 23, 18, 32), (11, 7, 18, 52), (11, 22, 16, 25), (12, 7, 11, 57), (12, 22, 5, 55)],
    2056: [(1, 5, 23, 15), (1, 20, 16, 32), (2, 4, 10, 46), (2, 19, 6, 29), (3, 5, 4, 31), (3, 20, 5, 10),
           (4, 4, 8, 59), (4, 19, 15, 51), (5, 5, 1, 57), (5, 20, 14, 41), (6, 5, 5, 51), (6, 20, 22, 27),
           (7, 6, 16, 1), (7, 22, 9, 21), (8, 7, 1, 55), (8, 22, 16, 38), (9, 7, 5, 6), (9, 22, 14, 38), (10, 7, 21, 8),
           (10, 23, 0, 24), (11, 7, 0, 42), (11, 21, 22, 19), (12, 6, 17, 50), (12, 21, 11, 51)],
    2057: [(1, 5, 5, 9), (1, 19, 22, 29), (2, 3, 16, 41), (2, 18, 12, 26), (3, 5, 10, 26), (3, 20, 11, 7),
           (4, 4, 14, 52), (4, 19, 21, 46), (5, 5, 7, 46), (5, 20, 20, 34), (6, 5, 11, 35), (6, 21, 4, 18),
           (7, 6, 21, 41), (7, 22, 15, 10), (8, 7, 7, 33), (8, 22, 22, 24), (9, 7, 10, 43), (9, 22, 20, 22),
           (10, 8, 2, 45), (10, 23, 6, 8), (11, 7, 6, 22), (11, 22, 4, 6), (12, 6, 23, 34), (12, 21, 17, 42)],
    2058: [(1, 5, 10, 57), (1, 20, 4, 25), (2, 3, 22, 33), (2, 18, 18, 25), (3, 5, 16, 19), (3, 20, 17, 4),
           (4, 4, 20, 43), (4, 20, 3, 40), (5, 5, 13, 35), (5, 21, 2, 23), (6, 5, 17, 24), (6, 21, 10, 3),
           (7, 7, 3, 30), (7, 22, 20, 53), (8, 7, 13, 24), (8, 23, 4, 8), (9, 7, 16, 37), (9, 23, 2, 7), (10, 8, 8, 40),
           (10, 23, 11, 53), (11, 7, 12, 16), (11, 22, 9, 50), (12, 7, 5, 26), (12, 21, 23, 24)],
    2059: [(1, 5, 16, 48), (1, 20, 10, 5), (2, 4, 4, 23), (2, 19, 0, 4), (3, 5, 22, 8), (3, 20, 22, 43), (4, 5, 2, 31),
           (4, 20, 9, 19), (5, 5, 19, 23), (5, 21, 8, 4), (6, 5, 23, 11), (6, 21, 15, 46), (7, 7, 9, 18),
           (7, 23, 2, 40), (8, 7, 19, 12), (8, 23, 9, 59), (9, 7, 22, 26), (9, 23, 8, 3), (10, 8, 14, 30),
           (10, 23, 17, 50), (11, 7, 18, 5), (11, 22, 15, 45), (12, 7, 11, 13), (12, 22, 5, 17)],
    2060: [(1, 5, 22, 33), (1, 20, 15, 57), (2, 4, 10, 7), (2, 19, 5, 56), (3, 5, 3, 53), (3, 20, 4, 37), (4, 4, 8, 19),
           (4, 19, 15, 16), (5, 5, 1, 12), (5, 20, 14, 2), (6, 5, 5, 1), (6, 20, 21, 45), (7, 6, 15, 6), (7, 22, 8, 35),
           (8, 7, 0, 58), (8, 22, 15, 49), (9, 7, 4, 10), (9, 22, 13, 47), (10, 7, 20, 12), (10, 22, 23, 32),
           (11, 6, 23, 48), (11, 21, 21, 28), (12, 6, 16, 57), (12, 21, 11, 0)],
    2061: [(1, 5, 4, 17), (1, 19, 21, 42), (2, 3, 15, 53), (2, 18, 11, 42), (3, 5, 9, 41), (3, 20, 10, 25),
           (4, 4, 14, 9), (4, 19, 21, 5), (5, 5, 7, 5), (5, 20, 19, 51), (6, 5, 10, 56), (6, 21, 3, 31), (7, 6, 21, 1),
           (7, 22, 14, 19), (8, 7, 6, 52), (8, 22, 21, 32), (9, 7, 10, 1), (9, 22, 19, 30), (10, 8, 2, 3),
           (10, 23, 5, 16), (11, 7, 5, 39), (11, 22, 3, 13), (12, 6, 22, 49), (12, 21, 16, 48)],
    2062: [(1, 5, 10, 12), (1, 20, 3, 29), (2, 3, 21, 46), (2, 18, 17, 27), (3, 5, 15, 30), (3, 20, 16, 6),
           (4, 4, 19, 54), (4, 20, 2, 44), (5, 5, 12, 46), (5, 21, 1, 29), (6, 5, 16, 34), (6, 21, 9, 10),
           (7, 7, 2, 37), (7, 22, 20, 1), (8, 7, 12, 28), (8, 23, 3, 17), (9, 7, 15, 39), (9, 23, 1, 19),
           (10, 8, 7, 44), (10, 23, 11, 7), (11, 7, 11, 21), (11, 22, 9, 6), (12, 7, 4, 33), (12, 21, 22, 42)],
    2063: [(1, 5, 15, 56), (1, 20, 9, 23), (2, 4, 3, 30), (2, 18, 23, 20), (3, 5, 21, 13), (3, 20, 21, 58),
           (4, 5, 1, 36), (4, 20, 8, 34), (5, 5, 18, 27), (5, 21, 7, 19), (6, 5, 22, 17), (6, 21, 15, 1), (7, 7, 8, 24),
           (7, 23, 1, 52), (8, 7, 18, 19), (8, 23, 9, 8), (9, 7, 21, 32), (9, 23, 7, 7), (10, 8, 13, 36),
           (10, 23, 16, 52), (11, 7, 17, 11), (11, 22, 14, 47), (12, 7, 10, 20), (12, 22, 4, 20)],
    2064: [(1, 5, 21, 40), (1, 20, 15, 0), (2, 4, 9, 14), (2, 19, 4, 58), (3, 5, 2, 58), (3, 20, 3, 38), (4, 4, 7, 23),
           (4, 19, 14, 15), (5, 5, 0, 17), (5, 20, 13, 1), (6, 5, 4, 9), (6, 20, 20, 45), (7, 6, 14, 19),
           (7, 22, 7, 38), (8, 7, 0, 13), (8, 22, 14, 56), (9, 7, 3, 25), (9, 22, 12, 56), (10, 7, 19, 27),
           (10, 22, 22, 41), (11, 6, 23, 1), (11, 21, 20, 36), (12, 6, 16, 8), (12, 21, 10, 8)],
    2065: [(1, 5, 3, 28), (1, 19, 20, 48), (2, 3, 15, 3), (2, 18, 10, 47), (3, 5, 8, 48), (3, 20, 9, 27),
           (4, 4, 13, 13), (4, 19, 20, 5), (5, 5, 6, 4), (5, 20, 18, 50), (6, 5, 9, 51), (6, 21, 2, 31), (7, 6, 19, 56),
           (7, 22, 13, 23), (8, 7, 5, 48), (8, 22, 20, 40), (9, 7, 9, 1), (9, 22, 18, 42), (10, 8, 1, 5),
           (10, 23, 4, 29), (11, 7, 4, 42), (11, 22, 2, 26), (12, 6, 21, 52), (12, 21, 16, 0)],
    2066: [(1, 5, 9, 14), (1, 20, 2, 41), (2, 3, 20, 48), (2, 18, 16, 40), (3, 5, 14, 33), (3, 20, 15, 19),
           (4, 4, 18, 57), (4, 20, 1, 54), (5, 5, 11, 48), (5, 21, 0, 36), (6, 5, 15, 35), (6, 21, 8, 15),
           (7, 7, 1, 41), (7, 22, 19, 5), (8, 7, 11, 36), (8, 23, 2, 22), (9, 7, 14, 52), (9, 23, 0, 26), (10, 8, 7, 0),
           (10, 23, 10, 15), (11, 7, 10, 38), (11, 22, 8, 13), (12, 7, 3, 47), (12, 21, 21, 44)],
    2067: [(1, 5, 15, 6), (1, 20, 8, 22), (2, 4, 2, 36), (2, 18, 22, 16), (3, 5, 20, 17), (3, 20, 20, 53),
           (4, 5, 0, 40), (4, 20, 7, 28), (5, 5, 17, 31), (5, 21, 6, 12), (6, 5, 21, 20), (6, 21, 13, 55),
           (7, 7, 7, 28), (7, 23, 0, 50), (8, 7, 17, 24), (8, 23, 8, 11), (9, 7, 20, 41), (9, 23, 6, 19),
           (10, 8, 12, 50), (10, 23, 16, 11), (11, 7, 16, 29), (11, 22, 14, 10), (12, 7, 9, 40), (12, 22, 3, 42)],
    2068: [(1, 5, 20, 58), (1, 20, 14, 19), (2, 4, 8, 28), (2, 19, 4, 12), (3, 5, 2, 8), (3, 20, 2, 48), (4, 4, 6, 29),
           (4, 19, 13, 23), (5, 4, 23, 20), (5, 20, 12, 9), (6, 5, 3, 8), (6, 20, 19, 53), (7, 6, 13, 16),
           (7, 22, 6, 46), (8, 6, 23, 10), (8, 22, 14, 3), (9, 7, 2, 25), (9, 22, 12, 6), (10, 7, 18, 32),
           (10, 22, 21, 56), (11, 6, 22, 12), (11, 21, 19, 56), (12, 6, 15, 25), (12, 21, 9, 32)],
    2069: [(1, 5, 2, 47), (1, 19, 20, 12), (2, 3, 14, 20), (2, 18, 10, 8), (3, 5, 8, 1), (3, 20, 8, 44), (4, 4, 12, 23),
           (4, 19, 19, 18), (5, 5, 5, 14), (5, 20, 18, 0), (6, 5, 9, 2), (6, 21, 1, 40), (7, 6, 19, 10),
           (7, 22, 12, 31), (8, 7, 5, 5), (8, 22, 19, 48), (9, 7, 8, 20), (9, 22, 17, 51), (10, 8, 0, 26),
           (10, 23, 3, 41), (11, 7, 4, 6), (11, 22, 1, 43), (12, 6, 21, 21), (12, 21, 15, 21)],
    2070: [(1, 5, 8, 46), (1, 20, 2, 4), (2, 3, 20, 21), (2, 18, 16, 0), (3, 5, 14, 1), (3, 20, 14, 34), (4, 4, 18, 19),
           (4, 20, 1, 3), (5, 5, 11, 4), (5, 20, 23, 42), (6, 5, 14, 47), (6, 21, 7, 22), (7, 7, 0, 51),
           (7, 22, 18, 15), (8, 7, 10, 46), (8, 23, 1, 36), (9, 7, 14, 3), (9, 22, 23, 44), (10, 8, 6, 12),
           (10, 23, 9, 37), (11, 7, 9, 54), (11, 22, 7, 40), (12, 7, 3, 10), (12, 21, 21, 18)],
    2071: [(1, 5, 14, 35), (1, 20, 8, 1), (2, 4, 2, 10), (2, 18, 21, 59), (3, 5, 19, 52), (3, 20, 20, 34),
           (4, 5, 0, 10), (4, 20, 7, 4), (5, 5, 16, 54), (5, 21, 5, 42), (6, 5, 20, 37), (6, 21, 13, 20), (7, 7, 6, 42),
           (7, 23, 0, 11), (8, 7, 16, 38), (8, 23, 7, 31), (9, 7, 19, 57), (9, 23, 5, 37), (10, 8, 12, 7),
           (10, 23, 15, 28), (11, 7, 15, 48), (11, 22, 13, 28), (12, 7, 9, 0), (12, 22, 3, 3)],
    2072: [(1, 5, 20, 22), (1, 20, 13, 44), (2, 4, 7, 56), (2, 19, 3, 42), (3, 5, 1, 40), (3, 20, 2, 20), (4, 4, 6, 3),
           (4, 19, 12, 54), (5, 4, 22, 53), (5, 20, 11, 35), (6, 5, 2, 39), (6, 20, 19, 13), (7, 6, 12, 44),
           (7, 22, 6, 3), (8, 6, 22, 38), (8, 22, 13, 21), (9, 7, 1, 54), (9, 22, 11, 27), (10, 7, 18, 2),
           (10, 22, 21, 19), (11, 6, 21, 43), (11, 21, 19, 19), (12, 6, 14, 55), (12, 21, 8, 55)],
    2073: [(1, 5, 2, 18), (1, 19, 19, 36), (2, 3, 13, 52), (2, 18, 9, 34), (3, 5, 7, 36), (3, 20, 8, 12),
           (4, 4, 11, 58), (4, 19, 18, 47), (5, 5, 4, 47), (5, 20, 17, 28), (6, 5, 8, 30), (6, 21, 1, 6),
           (7, 6, 18, 30), (7, 22, 11, 54), (8, 7, 4, 19), (8, 22, 19, 10), (9, 7, 7, 32), (9, 22, 17, 14),
           (10, 7, 23, 40), (10, 23, 3, 7), (11, 7, 3, 23), (11, 22, 1, 10), (12, 6, 20, 39), (12, 21, 14, 50)],
    2074: [(1, 5, 8, 5), (1, 20, 1, 33), (2, 3, 19, 40), (2, 18, 15, 31), (3, 5, 13, 23), (3, 20, 14, 8),
           (4, 4, 17, 44), (4, 20, 0, 41), (5, 5, 10, 32), (5, 20, 23, 21), (6, 5, 14, 17), (6, 21, 6, 57),
           (7, 7, 0, 20), (7, 22, 17, 45), (8, 7, 10, 12), (8, 23, 1, 0), (9, 7, 13, 27), (9, 22, 23, 3),
           (10, 8, 5, 36), (10, 23, 8, 55), (11, 7, 9, 19), (11, 22, 6, 57), (12, 7, 2, 33), (12, 21, 20, 34)],
    2075: [(1, 5, 13, 57), (1, 20, 7, 15), (2, 4, 1, 30), (2, 18, 21, 11), (3, 5, 19, 10), (3, 20, 19, 46),
           (4, 4, 23, 30), (4, 20, 6, 17), (5, 5, 16, 19), (5, 21, 4, 59), (6, 5, 20, 6), (6, 21, 12, 39),
           (7, 7, 6, 12), (7, 22, 23, 32), (8, 7, 16, 7), (8, 23, 6, 52), (9, 7, 19, 23), (9, 23, 4, 58),
           (10, 8, 11, 30), (10, 23, 14, 50), (11, 7, 15, 11), (11, 22, 12, 50), (12, 7, 8, 23), (12, 22, 2, 26)],
    2076: [(1, 5, 19, 46), (1, 20, 13, 7), (2, 4, 7, 19), (2, 19, 3, 2), (3, 5, 1, 0), (3, 20, 1, 38), (4, 4, 5, 19),
           (4, 19, 12, 11), (5, 4, 22, 7), (5, 20, 10, 54), (6, 5, 1, 54), (6, 20, 18, 36), (7, 6, 11, 59),
           (7, 22, 5, 29), (8, 6, 21, 54), (8, 22, 12, 47), (9, 7, 1, 8), (9, 22, 10, 49), (10, 7, 17, 14),
           (10, 22, 20, 38), (11, 6, 20, 52), (11, 21, 18, 37), (12, 6, 14, 4), (12, 21, 8, 12)],
    2077: [(1, 5, 1, 27), (1, 19, 18, 54), (2, 3, 13, 2), (2, 18, 8, 53), (3, 5, 6, 46), (3, 20, 7, 30), (4, 4, 11, 8),
           (4, 19, 18, 3), (5, 5, 3, 57), (5, 20, 16, 44), (6, 5, 7, 44), (6, 21, 0, 22), (7, 6, 17, 50),
           (7, 22, 11, 13), (8, 7, 3, 45), (8, 22, 18, 31), (9, 7, 7, 2), (9, 22, 16, 35), (10, 7, 23, 10),
           (10, 23, 2, 25), (11, 7, 2, 49), (11, 22, 0, 24), (12, 6, 20, 1), (12, 21, 14, 0)],
    2078: [(1, 5, 7, 24), (1, 20, 0, 40), (2, 3, 18, 56), (2, 18, 14, 36), (3, 5, 12, 37), (3, 20, 13, 10),
           (4, 4, 16, 55), (4, 19, 23, 40), (5, 5, 9, 41), (5, 20, 22, 18), (6, 5, 13, 24), (6, 21, 5, 57),
           (7, 6, 23, 28), (7, 22, 16, 50), (8, 7, 9, 23), (8, 23, 0, 13), (9, 7, 12, 43), (9, 22, 22, 23),
           (10, 8, 4, 55), (10, 23, 8, 19), (11, 7, 8, 38), (11, 22, 6, 22), (12, 7, 1, 52), (12, 21, 19, 57)],
    2079: [(1, 5, 13, 12), (1, 20, 6, 35), (2, 4, 0, 42), (2, 18, 20, 27), (3, 5, 18, 20), (3, 20, 19, 0),
           (4, 4, 22, 36), (4, 20, 5, 30), (5, 5, 15, 21), (5, 21, 4, 9), (6, 5, 19, 5), (6, 21, 11, 48), (7, 7, 5, 11),
           (7, 22, 22, 42), (8, 7, 15, 8), (8, 23, 6, 3), (9, 7, 18, 29), (9, 23, 4, 12), (10, 8, 10, 42),
           (10, 23, 14, 7), (11, 7, 14, 26), (11, 22, 12, 9), (12, 7, 7, 39), (12, 22, 1, 43)],
    2080: [(1, 5, 18, 59), (1, 20, 12, 20), (2, 4, 6, 27), (2, 19, 2, 11), (3, 5, 0, 4), (3, 20, 0, 43), (4, 4, 4, 22),
           (4, 19, 11, 13), (5, 4, 21, 10), (5, 20, 9, 53), (6, 5, 0, 57), (6, 20, 17, 33), (7, 6, 11, 5),
           (7, 22, 4, 26), (8, 6, 21, 2), (8, 22, 11, 47), (9, 7, 0, 21), (9, 22, 9, 55), (10, 7, 16, 33),
           (10, 22, 19, 51), (11, 6, 20, 18), (11, 21, 17, 55), (12, 6, 13, 33), (12, 21, 7, 32)],
    2081: [(1, 5, 0, 55), (1, 19, 18, 11), (2, 3, 12, 25), (2, 18, 8, 3), (3, 5, 6, 2), (3, 20, 6, 33), (4, 4, 10, 16),
           (4, 19, 17, 1), (5, 5, 2, 59), (5, 20, 15, 38), (6, 5, 6, 40), (6, 20, 23, 15), (7, 6, 16, 43),
           (7, 22, 10, 7), (8, 7, 2, 36), (8, 22, 17, 28), (9, 7, 5, 54), (9, 22, 15, 37), (10, 7, 22, 6),
           (10, 23, 1, 34), (11, 7, 1, 52), (11, 21, 23, 40), (12, 6, 19, 11), (12, 21, 13, 22)],
    2082: [(1, 5, 6, 38), (1, 20, 0, 5), (2, 3, 18, 11), (2, 18, 13, 59), (3, 5, 11, 49), (3, 20, 12, 30),
           (4, 4, 16, 2), (4, 19, 22, 54), (5, 5, 8, 42), (5, 20, 21, 28), (6, 5, 12, 21), (6, 21, 5, 2),
           (7, 6, 22, 24), (7, 22, 15, 52), (8, 7, 8, 20), (8, 22, 23, 12), (9, 7, 11, 42), (9, 22, 21, 22),
           (10, 8, 3, 57), (10, 23, 7, 19), (11, 7, 7, 43), (11, 22, 5, 24), (12, 7, 1, 1), (12, 21, 19, 4)],
    2083: [(1, 5, 12, 25), (1, 20, 5, 45), (2, 3, 23, 57), (2, 18, 19, 39), (3, 5, 17, 35), (3, 20, 18, 10),
           (4, 4, 21, 49), (4, 20, 4, 34), (5, 5, 14, 31), (5, 21, 3, 8), (6, 5, 18, 11), (6, 21, 10, 43),
           (7, 7, 4, 15), (7, 22, 21, 35), (8, 7, 14, 12), (8, 23, 4, 58), (9, 7, 17, 34), (9, 23, 3, 11),
           (10, 8, 9, 48), (10, 23, 13, 9), (11, 7, 13, 35), (11, 22, 11, 15), (12, 7, 6, 51), (12, 22, 0, 52)],
    2084: [(1, 5, 18, 14), (1, 20, 11, 33), (2, 4, 5, 46), (2, 19, 1, 26), (3, 4, 23, 24), (3, 19, 23, 59),
           (4, 4, 3, 39), (4, 19, 10, 27), (5, 4, 20, 22), (5, 20, 9, 3), (6, 5, 0, 2), (6, 20, 16, 40), (7, 6, 10, 2),
           (7, 22, 3, 30), (8, 6, 19, 55), (8, 22, 10, 49), (9, 6, 23, 13), (9, 22, 8, 58), (10, 7, 15, 26),
           (10, 22, 18, 55), (11, 6, 19, 13), (11, 21, 17, 1), (12, 6, 12, 30), (12, 21, 6, 40)],
    2085: [(1, 4, 23, 55), (1, 19, 17, 23), (2, 3, 11, 29), (2, 18, 7, 19), (3, 5, 5, 10), (3, 20, 5, 53),
           (4, 4, 9, 27), (4, 19, 16, 22), (5, 5, 2, 12), (5, 20, 14, 58), (6, 5, 5, 54), (6, 20, 22, 32),
           (7, 6, 15, 55), (7, 22, 9, 18), (8, 7, 1, 48), (8, 22, 16, 35), (9, 7, 5, 7), (9, 22, 14, 43),
           (10, 7, 21, 19), (10, 23, 0, 39), (11, 7, 1, 7), (11, 21, 22, 46), (12, 6, 18, 26), (12, 21, 12, 28)],
    2086: [(1, 5, 5, 53), (1, 19, 23, 11), (2, 3, 17, 25), (2, 18, 13, 4), (3, 5, 11, 3), (3, 20, 11, 34),
           (4, 4, 15, 17), (4, 19, 22, 0), (5, 5, 7, 58), (5, 20, 20, 34), (6, 5, 11, 38), (6, 21, 4, 9),
           (7, 6, 21, 39), (7, 22, 14, 59), (8, 7, 7, 32), (8, 22, 22, 20), (9, 7, 10, 51), (9, 22, 20, 31),
           (10, 8, 3, 6), (10, 23, 6, 31), (11, 7, 6, 55), (11, 22, 4, 40), (12, 7, 0, 15), (12, 21, 18, 22)],
    2087: [(1, 5, 11, 42), (1, 20, 5, 4), (2, 3, 23, 14), (2, 18, 18, 58), (3, 5, 16, 51), (3, 20, 17, 27),
           (4, 4, 21, 4), (4, 20, 3, 53), (5, 5, 13, 44), (5, 21, 2, 28), (6, 5, 17, 24), (6, 21, 10, 5), (7, 7, 3, 27),
           (7, 22, 20, 57), (8, 7, 13, 23), (8, 23, 4, 19), (9, 7, 16, 43), (9, 23, 2, 27), (10, 8, 8, 57),
           (10, 23, 12, 23), (11, 7, 12, 42), (11, 22, 10, 28), (12, 7, 5, 59), (12, 22, 0, 8)],
    2088: [(1, 5, 17, 24), (1, 20, 10, 50), (2, 4, 4, 57), (2, 19, 0, 44), (3, 4, 22, 36), (3, 19, 23, 16),
           (4, 4, 2, 52), (4, 19, 9, 43), (5, 4, 19, 36), (5, 20, 8, 19), (6, 4, 23, 19), (6, 20, 15, 56),
           (7, 6, 9, 25), (7, 22, 2, 47), (8, 6, 19, 23), (8, 22, 10, 9), (9, 6, 22, 43), (9, 22, 8, 17),
           (10, 7, 14, 55), (10, 22, 18, 13), (11, 6, 18, 40), (11, 21, 16, 17), (12, 6, 11, 56), (12, 21, 5, 55)],
    2089: [(1, 4, 23, 20), (1, 19, 16, 37), (2, 3, 10, 54), (2, 18, 6, 33), (3, 5, 4, 34), (3, 20, 5, 6), (4, 4, 8, 49),
           (4, 19, 15, 33), (5, 5, 1, 31), (5, 20, 14, 7), (6, 5, 5, 10), (6, 20, 21, 42), (7, 6, 15, 10),
           (7, 22, 8, 33), (8, 7, 1, 4), (8, 22, 15, 55), (9, 7, 4, 23), (9, 22, 14, 6), (10, 7, 20, 37),
           (10, 23, 0, 4), (11, 7, 0, 24), (11, 21, 22, 11), (12, 6, 17, 42), (12, 21, 11, 51)],
    2090: [(1, 5, 5, 8), (1, 19, 22, 34), (2, 3, 16, 41), (2, 18, 12, 29), (3, 5, 10, 21), (3, 20, 11, 1),
           (4, 4, 14, 35), (4, 19, 21, 27), (5, 5, 7, 16), (5, 20, 20, 1), (6, 5, 10, 54), (6, 21, 3, 35),
           (7, 6, 20, 56), (7, 22, 14, 25), (8, 7, 6, 52), (8, 22, 21, 46), (9, 7, 10, 15), (9, 22, 19, 58),
           (10, 8, 2, 33), (10, 23, 5, 58), (11, 7, 6, 22), (11, 22, 4, 5), (12, 6, 23, 39), (12, 21, 17, 43)],
    2091: [(1, 5, 11, 1), (1, 20, 4, 21), (2, 3, 22, 30), (2, 18, 18, 12), (3, 5, 16, 5), (3, 20, 16, 41),
           (4, 4, 20, 19), (4, 20, 3, 7), (5, 5, 13, 2), (5, 21, 1, 42), (6, 5, 16, 45), (6, 21, 9, 18), (7, 7, 2, 50),
           (7, 22, 20, 11), (8, 7, 12, 49), (8, 23, 3, 35), (9, 7, 16, 12), (9, 23, 1, 50), (10, 8, 8, 30),
           (10, 23, 11, 52), (11, 7, 12, 20), (11, 22, 9, 59), (12, 7, 5, 38), (12, 21, 23, 38)],
    2092: [(1, 5, 17, 0), (1, 20, 10, 16), (2, 4, 4, 28), (2, 19, 0, 5), (3, 4, 22, 2), (3, 19, 22, 33), (4, 4, 2, 14),
           (4, 19, 8, 58), (5, 4, 18, 55), (5, 20, 7, 36), (6, 4, 22, 37), (6, 20, 15, 14), (7, 6, 8, 40),
           (7, 22, 2, 7), (8, 6, 18, 35), (8, 22, 9, 29), (9, 6, 21, 55), (9, 22, 7, 41), (10, 7, 14, 11),
           (10, 22, 17, 41), (11, 6, 18, 0), (11, 21, 15, 50), (12, 6, 11, 20), (12, 21, 5, 31)],
    2093: [(1, 4, 22, 46), (1, 19, 16, 13), (2, 3, 10, 18), (2, 18, 6, 5), (3, 5, 3, 53), (3, 20, 4, 34), (4, 4, 8, 5),
           (4, 19, 14, 58), (5, 5, 0, 45), (5, 20, 13, 31), (6, 5, 4, 26), (6, 20, 21, 6), (7, 6, 14, 30),
           (7, 22, 7, 56), (8, 7, 0, 27), (8, 22, 15, 18), (9, 7, 3, 49), (9, 22, 13, 28), (10, 7, 20, 5),
           (10, 22, 23, 27), (11, 6, 23, 55), (11, 21, 21, 37), (12, 6, 17, 16), (12, 21, 11, 20)],
    2094: [(1, 5, 4, 44), (1, 19, 22, 3), (2, 3, 16, 16), (2, 18, 11, 55), (3, 5, 9, 50), (3, 20, 10, 21),
           (4, 4, 13, 59), (4, 19, 20, 40), (5, 5, 6, 35), (5, 20, 19, 9), (6, 5, 10, 11), (6, 21, 2, 41),
           (7, 6, 20, 13), (7, 22, 13, 33), (8, 7, 6, 11), (8, 22, 20, 59), (9, 7, 9, 35), (9, 22, 19, 16),
           (10, 8, 1, 54), (10, 23, 5, 19), (11, 7, 5, 46), (11, 22, 3, 30), (12, 6, 23, 7), (12, 21, 17, 12)],
    2095: [(1, 5, 10, 34), (1, 20, 3, 55), (2, 3, 22, 6), (2, 18, 17, 47), (3, 5, 15, 41), (3, 20, 16, 14),
           (4, 4, 19, 50), (4, 20, 2, 35), (5, 5, 12, 25), (5, 21, 1, 5), (6, 5, 15, 59), (6, 21, 8, 38), (7, 7, 2, 0),
           (7, 22, 19, 30), (8, 7, 11, 58), (8, 23, 2, 55), (9, 7, 15, 23), (9, 23, 1, 10), (10, 8, 7, 42),
           (10, 23, 11, 12), (11, 7, 11, 32), (11, 22, 9, 20), (12, 7, 4, 51), (12, 21, 23, 0)],
    2096: [(1, 5, 16, 15), (1, 20, 9, 41), (2, 4, 3, 46), (2, 18, 23, 33), (3, 4, 21, 22), (3, 19, 22, 2),
           (4, 4, 1, 35), (4, 19, 8, 26), (5, 4, 18, 15), (5, 20, 6, 58), (6, 4, 21, 53), (6, 20, 14, 30),
           (7, 6, 7, 56), (7, 22, 1, 19), (8, 6, 17, 52), (8, 22, 8, 41), (9, 6, 21, 16), (9, 22, 6, 54),
           (10, 7, 13, 34), (10, 22, 16, 55), (11, 6, 17, 25), (11, 21, 15, 5), (12, 6, 10, 45), (12, 21, 4, 45)],
    2097: [(1, 4, 22, 10), (1, 19, 15, 26), (2, 3, 9, 41), (2, 18, 5, 19), (3, 5, 3, 17), (3, 20, 3, 48), (4, 4, 7, 29),
           (4, 19, 14, 10), (5, 5, 0, 7), (5, 20, 12, 41), (6, 5, 3, 43), (6, 20, 20, 12), (7, 6, 13, 40),
           (7, 22, 7, 0), (8, 6, 23, 32), (8, 22, 14, 21), (9, 7, 2, 52), (9, 22, 12, 35), (10, 7, 19, 10),
           (10, 22, 22, 39), (11, 6, 23, 3), (11, 21, 20, 52), (12, 6, 16, 27), (12, 21, 10, 37)],
    2098: [(1, 5, 3, 56), (1, 19, 21, 20), (2, 3, 15, 28), (2, 18, 11, 12), (3, 5, 9, 3), (3, 20, 9, 40),
           (4, 4, 13, 12), (4, 19, 20, 1), (5, 5, 5, 48), (5, 20, 18, 31), (6, 5, 9, 22), (6, 21, 2, 2), (7, 6, 19, 21),
           (7, 22, 12, 50), (8, 7, 5, 16), (8, 22, 20, 11), (9, 7, 8, 38), (9, 22, 18, 23), (10, 8, 0, 57),
           (10, 23, 4, 26), (11, 7, 4, 50), (11, 22, 2, 37), (12, 6, 22, 12), (12, 21, 16, 20)],
    2099: [(1, 5, 9, 38), (1, 20, 3, 1), (2, 3, 21, 9), (2, 18, 16, 52), (3, 5, 14, 42), (3, 20, 15, 17),
           (4, 4, 18, 51), (4, 20, 1, 37), (5, 5, 11, 28), (5, 21, 0, 7), (6, 5, 15, 7), (6, 21, 7, 41), (7, 7, 1, 11),
           (7, 22, 18, 32), (8, 7, 11, 9), (8, 23, 1, 56), (9, 7, 14, 33), (9, 23, 0, 10), (10, 8, 6, 51),
           (10, 23, 10, 12), (11, 7, 10, 42), (11, 22, 8, 22), (12, 7, 4, 2), (12, 21, 22, 3)],

    # 更多年份 在 extract_seasonal_equinox_data 整理添加
}
# https://jieqi.txcx.com/jieqi-2054.html
# 从这个网站复制来的，填写后，放入extract_time 函数一跑出结果
# 诞生时间：公历日期：2024-04-28 16:38:43    甲辰年 辰月 酉将 壬戌日 申时   3 月 20 日 申 时   未来节气：立夏 5月5日8时10分
MONTH_NAME = (
    '丑月', '子将', '寅月', '亥将', '卯月', '戌将', '辰月', '酉将', '巳月', '申将', '午月', '未将', '未月', '午将',
    '申月', '巳将',
    '酉月', '辰将', '戌月', '卯将', '亥月', '寅将', '子月', '丑将',)

'''计算年月日时'''


def get_ganzhi_year(year):
    GAN = [gan[-3 + i] for i in range(10)]
    ZHI = [zhi[-3 + i] for i in range(12)]
    return GAN[year % 10] + ZHI[year % 12] + '年'


def find_between_seasons(given_time: datetime, mode=str, given_hour: int = None) -> tuple:
    '''
    给定时间，确定处于什么
    return season, next_season_key, True
    str-output:
    甲辰年 申将 午月 子时
    (f"当前时间：{result[-1]} {result[0]} {result[1]} {ganzhi_day} {result[-2]}")
    (f"未来节气：{result[2]} {result[3]}")
    未来节气：夏至 6月21日4时50分
    output(int):
    年干，年支，月建，月将，时辰
    '''

    year = given_time.year
    if year in seasonal_equinox_data:
        this_year: list[tuple] = seasonal_equinox_data[year]  # 选取这个年份的节气时间表，筛选掉已经过去很久的节气
    else:
        this_year: list[tuple] = seasonal_equinox_data[2024]  # 选取这个年份的节气时间表，筛选掉已经过去很久的节气

    for i, time in enumerate(this_year):
        month, day, hour, minute = time
        dt = datetime.datetime(year, month, day, hour, minute)  # 节气时间点 dt，尚未到来
        if given_time < dt:
            time_string = f'{month}月{day}日{hour}时{minute}分'
            if given_time.month == month and given_time.day in [day - 1, day]:
                time_string += '(【注】即将交节气)'

            year = year - 1 if i < 2 else year
            h = get_hour(hour=given_time.hour, given_hour=given_hour)
            break

    if mode == str:
        return MONTH_NAME[i - 2], MONTH_NAME[i - 1], seasons[i], time_string, zhi[h % 12] + '时', get_ganzhi_year(year)
    elif mode == int:
        return (year - 3) % 10, (year - 3) % 12, (i // 2 + 2) % 12, (13 - i // 2) % 12, h, seasons[i], time_string
        # 年干，年支，月建，月将，时辰


def get_ganzhi_date(given_time: datetime = None, year=None, month=None, day=None, mode=str):
    start_date = datetime.datetime(2023, 7, 4)  # 起始日期
    if given_time:
        target_date = given_time
    elif year and month and day:
        target_date = datetime.datetime(year, month, day)
    else:
        return
    days_diff = (target_date - start_date).days

    day_gan = days_diff % 10  # + ((days_diff % 10) // 5)  # 日辰天干
    day_zhi = days_diff % 12

    if mode == str:
        ganzhi_day = gan[day_gan % 10] + zhi[day_zhi % 12] + '日'
        return ganzhi_day
    elif mode == int:
        return day_gan % 10, day_zhi % 12


def get_hour(hour: int = None, given_hour: int = None):
    if given_hour:
        return given_hour
    else:
        return 1 if hour == 23 else (hour + 1) // 2 + 1


def GetCurrentTime(date_string: str = None, hour=None, Mode=str):
    # 输入日期
    if date_string:
        currentTime = datetime.datetime.strptime(date_string, '%Y-%m-%d')
    else:
        currentTime = datetime.datetime.now()
    formatted_time = currentTime.strftime("%Y-%m-%d %H:%M:%S")

    # 查询干支历法日期
    result = find_between_seasons(currentTime, Mode, hour)
    ganzhi_day = get_ganzhi_date(currentTime, mode=Mode)

    if Mode == str:
        text = f'公历日期：{formatted_time}\n当前时间：{result[-1]} {result[0]} {result[1]} {ganzhi_day} {result[-2]}\n未来节气：{result[2]} {result[3]}'

        return text

    elif Mode == int:
        time_dict = {'Yg': result[0], 'Y': result[1], 'm': result[2], 'mj': result[3], 'dg': ganzhi_day[0],
                     'd': ganzhi_day[1], 'H': result[4], 'msg': ' '.join([formatted_time, result[5], result[6]])}

        return time_dict


'''时间字符串转信息'''


def time_str_process(string):
    from handle_text.extract_format import findZodiacWord,extract_int_from_text

    string = string.strip()
    if not string or ('月' not in string and '日' not in string):
        return GetCurrentTime(Mode=int)

    result = extract_int_from_text(string)
    condition = all(n is not None for n in [result[2],result[3],result[4]])
    if condition:
        return {'Yg': result[0], 'Y': result[1], 'm': result[2],'dg': result[3],
                     'd': result[4], 'H': result[5],}
    elif result[-1] is not None:
        return GetCurrentTime(hour=result[-1],Mode=int)

    else:
        print('error:',string)
        return {}

    # 不允许用户输入数字 如 3 10 12，代表寅月癸亥日





if __name__ == '__main__':
    print('*' * 30 + '\n' + ' ' * 10 + '时间信息\n' + '*' * 30)

    # usage GetCurrentTime (str)
    text = GetCurrentTime(Mode=str)
    print(text)

    # usage GetCurrentTime (int)
    time_dict = GetCurrentTime(Mode=int)
    li = ['Yg-年干', 'Y-年支', 'm-月建', 'mj-月将', 'dg-日干', 'd-日辰', 'H-时辰', 'msg-其他']
    for string in li:
        k, name = string.split('-')
        print(name, time_dict[k])

    text = GetCurrentTime(input('输入需要查找的年-月-日'), Mode=str)
    print(text)
